using System.Data.Entity.ModelConfiguration;
using InseSoft.Models.Entities;

namespace InseSoft.Models.Mapping
{
    public class UsuarioMap : EntityTypeConfiguration<Usuario>
    {
        public UsuarioMap()
        {
            // Primary Key
            HasKey(t => t.Id);

            // Properties
            Property(t => t.Nombre)
                .IsRequired()
                .HasMaxLength(50);

            Property(t => t.NombreUsuario)
                .IsRequired()
                .HasMaxLength(30);

            Property(t => t.Clave)
                .IsRequired()
                .HasMaxLength(30);

            // Table & Column Mappings
            ToTable("Usuario");
            Property(t => t.Id).HasColumnName("Id");
            Property(t => t.EmpresaId).HasColumnName("EmpresaId");
            Property(t => t.Nombre).HasColumnName("Nombre");
            Property(t => t.NombreUsuario).HasColumnName("NombreUsuario");
            Property(t => t.Clave).HasColumnName("Clave");
            Property(t => t.Cotizar).HasColumnName("Cotizar");
            Property(t => t.Borrar).HasColumnName("Borrar");
            Property(t => t.Crear).HasColumnName("Crear");
            Property(t => t.Activo).HasColumnName("Activo");

            // Relationships
            HasRequired(t => t.Empresa)
                .WithMany(t => t.Usuarios)
                .HasForeignKey(d => d.EmpresaId);

            HasMany(p => p.Permisos)
                .WithMany(x => x.Usuarios)
                .Map(
                    m =>
                    {
                        m.MapLeftKey("UsuarioId");
                        m.MapRightKey("PermisoId");
                        m.ToTable("Usuario_Permiso");
                    });
        }
    }
}
